Network applications (and in particular, Web applications) are advantageous in that they can reach a large audience. The client is typically equipped with a browser. Traditionally, network applications had been request-response oriented. For instance, the browser of the client issues a request for a Web page from a server. The server then provides the Web page to the client, whereupon the browser renders the Web page. If another Web page is desired, the browser (in response to executing script and/or in response to user action) would issue a request for another Web page, and so forth. Thus, Web navigation would proceed from Web page to Web page. In this context, Web navigation was a simple issue. If the user navigates backward (e.g., by pressing the “back” button), the browser would simply render the prior page.
The use of scripting languages and server-side technologies permits some enhancement to this basic Web browsing experience by allowing controls to be embedded in the Web page. In traditional scripting, if the Web application is to retrieve any information from a database or a file on the server, or send user information to a server, the browser would engage in form posting or linking to interface with the server. The browser would then retrieve the Web page from the server, and render the next Web page.
One conventional technology, often referred to in the industry as Asynchronous JavaScript And Xml (“AJAX”) offers a significant enhancement on this traditional Web navigation experience. With AJAX implemented with JavaScript, the script communicates directly with the server through the JavaScript XMLHttpRequest object. Using this object, a Web page can make a request to, and get a response from a Web server—without reloading the page. Such requests are often referred to as “asynchronous postbacks”. The browser will stay with the same page loaded, and the user will not notice that scripts request updated data, or send data to a server in the background. Thus, this type of technology permits Web application to be built around a single Web page.
However, browser navigation is a much more difficult problem to solve in the context of such rich applications. The user might have performed many tasks, and experienced many state changes in the context of a single Web page. However, if the users click the browser's Back button, by default the browser does not return to a previous state of the page (for example, the state before the most recent asynchronous postback). Instead, the browser unloads the page entirely and returns to the page that was displayed before your page was started. This is often not what the user intended.